package py.com.sole.solesys;

import java.io.Serializable;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import org.primefaces.context.RequestContext;
import org.primefaces.event.SelectEvent;
import py.com.sole.dao.DaoFactory;
import py.com.sole.model.Institucion;

@ManagedBean
@SessionScoped
public class InstitucionBean implements Serializable {

  /**
   *
   */
  private static final long serialVersionUID = 1L;
  private int id;
  private String descripcion;
  private List<Institucion> instituciones;
  private Institucion institucionSelected;
  private boolean bloquearBotones = true;

  @PostConstruct
  private void init() {
    institucionSelected = new Institucion();
    instituciones = DaoFactory.getInstitucion().getInstituciones();
  }

  public void clean() {
    this.descripcion = null;
    this.institucionSelected = null;
    this.bloquearBotones = true;

  }

  public void addInstitucion() {
    FacesContext context = FacesContext.getCurrentInstance();
    for (Institucion inst : instituciones) {

      if (inst.getDescripcion().equals(descripcion)) {
        context.addMessage(null, new FacesMessage("Advertencia", "La institucion " + descripcion + " ya se encuentra registrada"));
        this.clean();
        return;
      }
    }

    Institucion institucion = new Institucion();
    institucion.setDescripcion(descripcion);
    institucion.setActivo(true);
    DaoFactory.getInstitucion().addInstitucion(institucion);
    context.addMessage(null, new FacesMessage("Mensaje", "Institucion " + descripcion + " almacenada exitosamente"));

    instituciones = DaoFactory.getInstitucion().getInstituciones();

    this.clean();
  }

  public void deleteInstitucion() {
    //DaoFactory.getInstitucion().deleteInstitucion(this.getInstitucionSelected().getId());
    Institucion institucion = DaoFactory.getInstitucion().getInstitucionById(
      this.getInstitucionSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    institucion.setDescripcion(descripcion);
    institucion.setActivo(false);
    DaoFactory.getInstitucion().updateInstitucion(institucion);
    context.addMessage(null, new FacesMessage("Mensaje", "Institucion "
                                              + descripcion + " eliminada exitosamente"));
    instituciones = DaoFactory.getInstitucion().getInstituciones();
    this.clean();
  }

  public void editInstitucion() {
    Institucion institucion = DaoFactory.getInstitucion().getInstitucionById(
      this.getInstitucionSelected().getId());
    FacesContext context = FacesContext.getCurrentInstance();
    institucion.setDescripcion(descripcion);
    DaoFactory.getInstitucion().updateInstitucion(institucion);
    context.addMessage(null, new FacesMessage("Mensaje", "Institucion "
                                              + descripcion + " almacenada exitosamente"));

    instituciones = DaoFactory.getInstitucion().getInstituciones();

    this.clean();
  }

  public void onRowSelect(SelectEvent event) {
    this.institucionSelected = ((Institucion) event.getObject());
    this.descripcion = this.institucionSelected.getDescripcion();
    this.bloquearBotones = false;
    RequestContext.getCurrentInstance().update("institucion-form:dtInst");
  }

  public void guardarListener() {

  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getDescripcion() {
    return descripcion;
  }

  public void setDescripcion(String descripcion) {
    this.descripcion = descripcion;
  }

  public List<Institucion> getInstituciones() {
    instituciones = DaoFactory.getInstitucion().getInstituciones();
    return instituciones;
  }

  public void setInstituciones(List<Institucion> instituciones) {
    this.instituciones = instituciones;
  }

  public Institucion getInstitucionSelected() {
    return institucionSelected;
  }

  public void setInstitucionSelected(Institucion institucionSelected) {
    this.institucionSelected = institucionSelected;
  }

  public boolean isBloquearBotones() {
    return bloquearBotones;
  }

  public void setBloquearBotones(boolean bloquearBotones) {
    this.bloquearBotones = bloquearBotones;
  }

}
